{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Dropout\n",
    "Dropout [1] is a technique for regularizing neural networks by randomly setting some features to zero during the forward pass. In this exercise you will implement a dropout layer and modify your fully-connected network to optionally use dropout.\n",
    "\n",
    "[1] Geoffrey E. Hinton et al, \"Improving neural networks by preventing co-adaptation of feature detectors\", arXiv 2012"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# As usual, a bit of setup\n",
    "\n",
    "import time\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from cs231n.classifiers.fc_net import *\n",
    "from cs231n.data_utils import get_CIFAR10_data\n",
    "from cs231n.gradient_check import eval_numerical_gradient, eval_numerical_gradient_array\n",
    "from cs231n.solver import Solver\n",
    "\n",
    "%matplotlib inline\n",
    "plt.rcParams['figure.figsize'] = (10.0, 8.0) # set default size of plots\n",
    "plt.rcParams['image.interpolation'] = 'nearest'\n",
    "plt.rcParams['image.cmap'] = 'gray'\n",
    "\n",
    "# for auto-reloading external modules\n",
    "# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython\n",
    "%load_ext autoreload\n",
    "%autoreload 2\n",
    "\n",
    "def rel_error(x, y):\n",
    "    \"\"\" returns relative error \"\"\"\n",
    "    return np.max(np.abs(x - y) / (np.maximum(1e-8, np.abs(x) + np.abs(y))))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "X_val:  (1000, 3, 32, 32)\n",
      "X_train:  (49000, 3, 32, 32)\n",
      "X_test:  (1000, 3, 32, 32)\n",
      "y_val:  (1000,)\n",
      "y_train:  (49000,)\n",
      "y_test:  (1000,)\n"
     ]
    }
   ],
   "source": [
    "# Load the (preprocessed) CIFAR10 data.\n",
    "\n",
    "data = get_CIFAR10_data()\n",
    "for k, v in data.iteritems():\n",
    "    print '%s: ' % k, v.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Dropout forward pass\n",
    "In the file `cs231n/layers.py`, implement the forward pass for dropout. Since dropout behaves differently during training and testing, make sure to implement the operation for both modes.\n",
    "\n",
    "Once you have done so, run the cell below to test your implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running tests with p =  0.3\n",
      "Mean of input:  10.0034071519\n",
      "Mean of train-time output:  9.98789648283\n",
      "Mean of test-time output:  10.0034071519\n",
      "Fraction of train-time output set to zero:  0.700456\n",
      "Fraction of test-time output set to zero:  0.0\n",
      "\n",
      "Running tests with p =  0.6\n",
      "Mean of input:  10.0034071519\n",
      "Mean of train-time output:  10.0175088516\n",
      "Mean of test-time output:  10.0034071519\n",
      "Fraction of train-time output set to zero:  0.399164\n",
      "Fraction of test-time output set to zero:  0.0\n",
      "\n",
      "Running tests with p =  0.75\n",
      "Mean of input:  10.0034071519\n",
      "Mean of train-time output:  9.99147561187\n",
      "Mean of test-time output:  10.0034071519\n",
      "Fraction of train-time output set to zero:  0.250676\n",
      "Fraction of test-time output set to zero:  0.0\n",
      "\n"
     ]
    }
   ],
   "source": [
    "x = np.random.randn(500, 500) + 10\n",
    "\n",
    "for p in [0.3, 0.6, 0.75]:\n",
    "    out, _ = dropout_forward(x, {'mode': 'train', 'p': p})\n",
    "    out_test, _ = dropout_forward(x, {'mode': 'test', 'p': p})\n",
    "\n",
    "    print 'Running tests with p = ', p\n",
    "    print 'Mean of input: ', x.mean()\n",
    "    print 'Mean of train-time output: ', out.mean()\n",
    "    print 'Mean of test-time output: ', out_test.mean()\n",
    "    print 'Fraction of train-time output set to zero: ', (out == 0).mean()\n",
    "    print 'Fraction of test-time output set to zero: ', (out_test == 0).mean()\n",
    "    print"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Dropout backward pass\n",
    "In the file `cs231n/layers.py`, implement the backward pass for dropout. After doing so, run the following cell to numerically gradient-check your implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "dx relative error:  5.44560909698e-11\n"
     ]
    }
   ],
   "source": [
    "x = np.random.randn(10, 10) + 10\n",
    "dout = np.random.randn(*x.shape)\n",
    "\n",
    "dropout_param = {'mode': 'train', 'p': 0.8, 'seed': 123}\n",
    "out, cache = dropout_forward(x, dropout_param)\n",
    "dx = dropout_backward(dout, cache)\n",
    "dx_num = eval_numerical_gradient_array(lambda xx: dropout_forward(xx, dropout_param)[0], x, dout)\n",
    "\n",
    "print 'dx relative error: ', rel_error(dx, dx_num)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Fully-connected nets with Dropout\n",
    "In the file `cs231n/classifiers/fc_net.py`, modify your implementation to use dropout. Specificially, if the constructor the the net receives a nonzero value for the `dropout` parameter, then the net should add dropout immediately after every ReLU nonlinearity. After doing so, run the following to numerically gradient-check your implementation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running check with dropout =  0\n",
      "Initial loss:  2.3051948274\n",
      "W1 relative error: 2.53e-07\n",
      "W2 relative error: 1.50e-05\n",
      "W3 relative error: 2.75e-07\n",
      "b1 relative error: 2.94e-06\n",
      "b2 relative error: 5.05e-08\n",
      "b3 relative error: 1.17e-10\n",
      "\n",
      "Running check with dropout =  0.25\n",
      "Initial loss:  2.31264683457\n",
      "W1 relative error: 1.48e-08\n",
      "W2 relative error: 2.34e-10\n",
      "W3 relative error: 3.56e-08\n",
      "b1 relative error: 1.53e-09\n",
      "b2 relative error: 1.84e-10\n",
      "b3 relative error: 8.70e-11\n",
      "\n",
      "Running check with dropout =  0.5\n",
      "Initial loss:  2.30243758771\n",
      "W1 relative error: 4.55e-08\n",
      "W2 relative error: 2.97e-08\n",
      "W3 relative error: 4.34e-07\n",
      "b1 relative error: 1.87e-08\n",
      "b2 relative error: 5.05e-09\n",
      "b3 relative error: 7.49e-11\n",
      "\n"
     ]
    }
   ],
   "source": [
    "N, D, H1, H2, C = 2, 15, 20, 30, 10\n",
    "X = np.random.randn(N, D)\n",
    "y = np.random.randint(C, size=(N,))\n",
    "\n",
    "for dropout in [0, 0.25, 0.5]:\n",
    "    print 'Running check with dropout = ', dropout\n",
    "    model = FullyConnectedNet([H1, H2], input_dim=D, num_classes=C,\n",
    "                            weight_scale=5e-2, dtype=np.float64,\n",
    "                            dropout=dropout, seed=123)\n",
    "\n",
    "    loss, grads = model.loss(X, y)\n",
    "    print 'Initial loss: ', loss\n",
    "\n",
    "    for name in sorted(grads):\n",
    "        f = lambda _: model.loss(X, y)[0]\n",
    "        grad_num = eval_numerical_gradient(f, model.params[name], verbose=False, h=1e-5)\n",
    "        print '%s relative error: %.2e' % (name, rel_error(grad_num, grads[name]))\n",
    "    print"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Regularization experiment\n",
    "As an experiment, we will train a pair of two-layer networks on 500 training examples: one will use no dropout, and one will use a dropout probability of 0.75. We will then visualize the training and validation accuracies of the two networks over time."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false,
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n",
      "(Iteration 1 / 125) loss: 8.596245\n",
      "(Epoch 0 / 25) train acc: 0.224000; val_acc: 0.183000\n",
      "(Epoch 1 / 25) train acc: 0.382000; val_acc: 0.219000\n",
      "(Epoch 2 / 25) train acc: 0.484000; val_acc: 0.248000\n",
      "(Epoch 3 / 25) train acc: 0.620000; val_acc: 0.275000\n",
      "(Epoch 4 / 25) train acc: 0.654000; val_acc: 0.246000\n",
      "(Epoch 5 / 25) train acc: 0.726000; val_acc: 0.278000\n",
      "(Epoch 6 / 25) train acc: 0.788000; val_acc: 0.304000\n",
      "(Epoch 7 / 25) train acc: 0.814000; val_acc: 0.261000\n",
      "(Epoch 8 / 25) train acc: 0.846000; val_acc: 0.267000\n",
      "(Epoch 9 / 25) train acc: 0.892000; val_acc: 0.286000\n",
      "(Epoch 10 / 25) train acc: 0.924000; val_acc: 0.297000\n",
      "(Epoch 11 / 25) train acc: 0.972000; val_acc: 0.270000\n",
      "(Epoch 12 / 25) train acc: 0.948000; val_acc: 0.282000\n",
      "(Epoch 13 / 25) train acc: 0.968000; val_acc: 0.295000\n",
      "(Epoch 14 / 25) train acc: 0.944000; val_acc: 0.280000\n",
      "(Epoch 15 / 25) train acc: 0.972000; val_acc: 0.288000\n",
      "(Epoch 16 / 25) train acc: 0.988000; val_acc: 0.308000\n",
      "(Epoch 17 / 25) train acc: 0.982000; val_acc: 0.291000\n",
      "(Epoch 18 / 25) train acc: 0.976000; val_acc: 0.277000\n",
      "(Epoch 19 / 25) train acc: 0.984000; val_acc: 0.280000\n",
      "(Epoch 20 / 25) train acc: 0.988000; val_acc: 0.290000\n",
      "(Iteration 101 / 125) loss: 0.017089\n",
      "(Epoch 21 / 25) train acc: 0.986000; val_acc: 0.295000\n",
      "(Epoch 22 / 25) train acc: 0.990000; val_acc: 0.289000\n",
      "(Epoch 23 / 25) train acc: 0.992000; val_acc: 0.288000\n",
      "(Epoch 24 / 25) train acc: 1.000000; val_acc: 0.290000\n",
      "(Epoch 25 / 25) train acc: 1.000000; val_acc: 0.290000\n",
      "0.75\n",
      "(Iteration 1 / 125) loss: 10.053350\n",
      "(Epoch 0 / 25) train acc: 0.274000; val_acc: 0.230000\n",
      "(Epoch 1 / 25) train acc: 0.352000; val_acc: 0.211000\n",
      "(Epoch 2 / 25) train acc: 0.444000; val_acc: 0.269000\n",
      "(Epoch 3 / 25) train acc: 0.566000; val_acc: 0.263000\n",
      "(Epoch 4 / 25) train acc: 0.650000; val_acc: 0.257000\n",
      "(Epoch 5 / 25) train acc: 0.678000; val_acc: 0.281000\n",
      "(Epoch 6 / 25) train acc: 0.764000; val_acc: 0.310000\n",
      "(Epoch 7 / 25) train acc: 0.764000; val_acc: 0.267000\n",
      "(Epoch 8 / 25) train acc: 0.808000; val_acc: 0.274000\n",
      "(Epoch 9 / 25) train acc: 0.884000; val_acc: 0.286000\n",
      "(Epoch 10 / 25) train acc: 0.858000; val_acc: 0.270000\n",
      "(Epoch 11 / 25) train acc: 0.934000; val_acc: 0.311000\n",
      "(Epoch 12 / 25) train acc: 0.922000; val_acc: 0.294000\n",
      "(Epoch 13 / 25) train acc: 0.898000; val_acc: 0.269000\n",
      "(Epoch 14 / 25) train acc: 0.906000; val_acc: 0.278000\n",
      "(Epoch 15 / 25) train acc: 0.916000; val_acc: 0.300000\n",
      "(Epoch 16 / 25) train acc: 0.942000; val_acc: 0.307000\n",
      "(Epoch 17 / 25) train acc: 0.972000; val_acc: 0.306000\n",
      "(Epoch 18 / 25) train acc: 0.940000; val_acc: 0.292000\n",
      "(Epoch 19 / 25) train acc: 0.980000; val_acc: 0.291000\n",
      "(Epoch 20 / 25) train acc: 0.934000; val_acc: 0.271000\n",
      "(Iteration 101 / 125) loss: 0.579881\n",
      "(Epoch 21 / 25) train acc: 0.964000; val_acc: 0.296000\n",
      "(Epoch 22 / 25) train acc: 0.974000; val_acc: 0.313000\n",
      "(Epoch 23 / 25) train acc: 0.968000; val_acc: 0.302000\n",
      "(Epoch 24 / 25) train acc: 0.988000; val_acc: 0.314000\n",
      "(Epoch 25 / 25) train acc: 0.974000; val_acc: 0.296000\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "cs231n/layers.py:695: RuntimeWarning: divide by zero encountered in log\n",
      "  loss = -np.sum(np.log(probs[np.arange(N), y])) / N\n"
     ]
    }
   ],
   "source": [
    "# Train two identical nets, one with dropout and one without\n",
    "\n",
    "num_train = 500\n",
    "small_data = {\n",
    "  'X_train': data['X_train'][:num_train],\n",
    "  'y_train': data['y_train'][:num_train],\n",
    "  'X_val': data['X_val'],\n",
    "  'y_val': data['y_val'],\n",
    "}\n",
    "\n",
    "solvers = {}\n",
    "dropout_choices = [0, 0.75]\n",
    "for dropout in dropout_choices:\n",
    "    model = FullyConnectedNet([500], dropout=dropout)\n",
    "    print dropout\n",
    "\n",
    "    solver = Solver(model, small_data,\n",
    "                  num_epochs=25, batch_size=100,\n",
    "                  update_rule='adam',\n",
    "                  optim_config={\n",
    "                    'learning_rate': 5e-4,\n",
    "                  },\n",
    "                  verbose=True, print_every=100)\n",
    "    solver.train()\n",
    "    solvers[dropout] = solver"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n4x//WNj1B1pvXr9PfOITnHjiiZx44om89KUvpbGxcfe+urq63ftmzJixz+s9/PDDHH/88QMWf18t\nXbqU9evXV+TcDg2VJElSTdi1axcf/ehH+cEPfkBTUxMnnXQSM2bM4Ljjjuty3Je//GUOOeQQNm7c\nyOLFi7n00ku58cYbWb9+PYsXL+bee+9l8+bNvPGNb+TXv/41dXV1fY5l586djBxZ+a/iV111Fe9+\n97sZPXp0xa9Vab19/a688srd97/whS+wZs2a3dsNDQ3cc889/Y5lsF6/pUuXcs455zzvOQ4EewQl\nSZI0JC1d08opC25j0mW3cMqC21i6prVf57v77rs55phjOProoznggAOYPXs23/ve95533Pe+9z3e\n+973AvD2t7+dFStWkJl873vfY/bs2Rx44IFMmjSJY445hrvvvvt5j//qV7/KS1/6UqZNm8Zdd921\nu/3CCy/kIx/5CCeffDKf+tSn+P3vf8/MmTOZMmUKr3rVq1i7di0A8+bN44ILLuDVr341xx57LF/8\n4heBUpGQOXPmcPzxx3PCCSdw4403AnDHHXdwzjnn7L7OxRdfzHXXXcfVV1/N5s2bOe200zjttNP6\n9bvbL2uXwJXHw7zG0u3aJf06XW9fv85uuOEGzj///D5dZ/Xq1bziFa/gFa94Bddee+3u9uuuu44Z\nM2Zw+umnc8YZZ+z19Xj961/P2WefzeTJk/nIRz7Cs88+uzueE044geOPP55LL71097kPOuig3fe/\n853vcOGFF/LjH/+YZcuWMWfOHE488UQeeOCBPj2PfbFHUJIkSUPO0jWtXH7TOtp37AKgta2dy29a\nB8DMqRP265ytra1MnDhx93ZTUxM/+9nP9nrcyJEjGTNmDNu2baO1tZVXvepVXR7f2to1OX300Uf5\n9Kc/zerVqxkzZgynnXYaU6dO3b2/paWFH//4x9TV1fGxj32MqVOnsnTpUm677Tbe85737O6tWrt2\nLT/96U/5wx/+wNSpUzn77LP5yU9+wj333MMvfvELtm7dykknncTrX//6PT7fSy65hM9//vPcfvvt\njB07dr9+Z/tt7ZKuy6lt31Tahv0uqNjb16/DI488wkMPPcTpp5++u+2pp56iubmZkSNHctlllzFz\n5sznPe5973sf11xzDa9//euZM2dOl30///nPWbt2LYceeij/+q//usfX4+6772b9+vUceeSRnHXW\nWdx000285jWv4dJLL2X16tUccsghvOlNb2Lp0qU9xgDwmte8hhkzZnDOOefw9re/vU+/q96wR1CS\nJElDzsLlG3YngR3ad+xi4fINBUXUOz/72c849dRTGTduHAcccADvfOc7u+x/xzvesXso6Z133skF\nF1wAwOmnn862bdt4/PHHATjvvPNoaGhg7NixnHbaadx9993ceeednH/++dTV1XHYYYfxhje8gZUr\nVw7uE+ytFfO7rqkNpe0V8wcthMWLF/P2t7+9y9DdRx55hFWrVvGtb32Lv/7rv35eL1tbWxttbW27\nE7qO16fDmWeeyaGHHgqw19dj2rRpHH300dTV1XH++edz5513snLlyt3vjZEjR/IXf/EX/OhHP6rk\nr2CvTAQrZKCHMkiSJNWSzW3tfWrvjQkTJrBp06bd2y0tLUyY8Pzexc7H7dy5k+3bt/OiF72o14/f\nmxe84AW9Oq57Vci9VYkcOXLk7qGHUOr1Ktz2lr6190Jff/+LFy9+3rDQjuOPPvpoTj311C7zB3uj\nEq9f9/2D9fqZCFZAx1CG1rZ2kueGMpgMSpIk9c74xoY+tffGSSedxP33389DDz3EM888w+LFi3us\nHDljxgyuv/56oDRf6/TTTycimDFjBosXL+bpp5/moYce4v7772fatGldHnvyySfzwx/+kG3btrFj\nxw6+/e1v7zGe173udXzzm98ESvPKxo4dywtf+EKgNE/xqaeeYtu2bdxxxx2cdNJJvO51r+PGG29k\n165dbNmyhR/96EdMmzaNI488kvXr1/P000/T1tbGihUrdl/j4IMP5oknntjv39l+G9PUt/Ze6O3r\nB/CrX/2Kxx57jFe/+tW72x577DGefvppALZu3cpdd931vCIsjY2NNDY2cueddwLsfn16sqfXA0pD\nQx966CGeffZZbrzxRl772tcybdo0fvjDH7J161Z27drFDTfcwBve8AYADjvsMO677z6effZZvvvd\n7+6+RiVfP+cIVsDehjLs75h2SZKkWjJn+uQucwQBGurrmDN98n6fc+TIkVxzzTVMnz6dXbt28f73\nv5+Xv/zlAMydO5fm5mZmzJjBBz7wAS644AKOOeYYDj30UBYvXgzAy1/+cmbNmsVxxx3HyJEjufba\na59XMfTFL34x8+bN49WvfjWNjY2ceOKJe4xn3rx5vP/972fKlCmMHj16d/IJMGXKFE477TS2bt3K\n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\nroK+jSakeQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fcf6e37ebd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot train and validation accuracies of the two models\n",
    "\n",
    "train_accs = []\n",
    "val_accs = []\n",
    "for dropout in dropout_choices:\n",
    "    solver = solvers[dropout]\n",
    "    train_accs.append(solver.train_acc_history[-1])\n",
    "    val_accs.append(solver.val_acc_history[-1])\n",
    "\n",
    "plt.subplot(3, 1, 1)\n",
    "for dropout in dropout_choices:\n",
    "    plt.plot(solvers[dropout].train_acc_history, 'o', label='%.2f dropout' % dropout)\n",
    "plt.title('Train accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(ncol=2, loc='lower right')\n",
    "  \n",
    "plt.subplot(3, 1, 2)\n",
    "for dropout in dropout_choices:\n",
    "    plt.plot(solvers[dropout].val_acc_history, 'o', label='%.2f dropout' % dropout)\n",
    "plt.title('Val accuracy')\n",
    "plt.xlabel('Epoch')\n",
    "plt.ylabel('Accuracy')\n",
    "plt.legend(ncol=2, loc='lower right')\n",
    "\n",
    "plt.gcf().set_size_inches(15, 15)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Question\n",
    "Explain what you see in this experiment. What does it suggest about dropout?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Answer\n"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
